<?php
namespace app\studentGrowth\controller;
use app\common\Base;
use app\common\Compent;
use app\common\Excel;
use think\Db;

class FinalTermScoreReport extends Base {
	
	public function index() {
		$fields = "政治平时成绩,政治期末成绩,政治总平成绩,政治期末级平均分,语文平时成绩,语文期末成绩,语文总平成绩,语文期末级平均分,语文口语,数学平时成绩,数学期末成绩,数学总平成绩,数学期末级平均分,英语平时成绩,英语期末成绩,英语总平成绩,英语期末级平均分,英语口语,生物平时成绩,生物期末成绩,生物总平成绩,生物期末级平均分,物理平时成绩,物理期末成绩,物理总平成绩,物理期末级平均分,化学平时成绩,化学期末成绩,化学总平成绩,化学期末级平均分,历史平时成绩,历史期末成绩,历史总平成绩,历史期末级平均分,地理平时成绩,地理期末成绩,地理总平成绩,地理期末级平均分,体育平时成绩,体育期末成绩,体育总平成绩,音乐总平成绩,美术总平成绩,信息平时成绩,信息期末成绩,信息总平成绩,综合总平成绩,操行分,德育等级";
		$this->assign("list",explode(",", $fields));
		return $this->fetch();
	}

	public function pageQuery() {
		$where["学期ID"] = input("termId");
		$where["上下学期"] = input("termType");
		$grade = input("grade");
		$clazz = input("clazz");
		$studentName = input("studentName");
		if($grade) {
			$array = explode("_", $grade);
			$grade = $array[0];
			$where["年级号"] = $grade;
		}
		$where["班号"] = $clazz;
		if($studentName) $where["学生姓名"] = $studentName;
		$result = Db::table("期末成绩报告")->alias("a")
				->join("学生信息 b","a.学生ID = b.ID","INNER")
				->field("a.ID,a.学号,学生姓名,政治平时成绩,政治期末成绩,政治总平成绩,政治期末级平均分,语文平时成绩,语文期末成绩,语文总平成绩,语文期末级平均分,语文口语,数学平时成绩,数学期末成绩,数学总平成绩,数学期末级平均分,英语平时成绩,英语期末成绩,英语总平成绩,英语期末级平均分,英语口语,生物平时成绩,生物期末成绩,生物总平成绩,生物期末级平均分,物理平时成绩,物理期末成绩,物理总平成绩,物理期末级平均分,化学平时成绩,化学期末成绩,化学总平成绩,化学期末级平均分,历史平时成绩,历史期末成绩,历史总平成绩,历史期末级平均分,地理平时成绩,地理期末成绩,地理总平成绩,地理期末级平均分,体育平时成绩,体育期末成绩,体育总平成绩,音乐总平成绩,美术总平成绩,信息平时成绩,信息期末成绩,信息总平成绩,综合总平成绩,操行分,德育等级,获奖情况,评语")
				->where($where)
				->order("学号")
				->select();
		return selectResult($result);
	}

	public function addUpdate() {
		$all = request()->param();
		try {
			if(array_key_exists("ID", $all)) {
				update('期末成绩报告', $all);
			} else {
				insert('期末成绩报告', $all);
			}
			return "000";
		} catch (Exception $e) {
			echo $e->getMessage();
		}
		return "999";
	}

	public function exportExcel() {
		$grade = input("grade");
		$clazz = input("clazz");
		if($grade) {
			$array = explode("_", $grade);
			$where["年级号"] = $array[0];
			$where["学籍类型"] = $array[1];
		}
		$where["班号"] = $clazz;
		$result = Db::table("学生信息")
				  ->field("学号,姓名,性别")
				  ->where($where)
				  ->select();
		$result = selectResult($result);
		//excel表头内容
		$fields = "学号,姓名,性别,政治平时成绩,政治期末成绩,政治总平成绩,政治期末级平均分,语文平时成绩,语文期末成绩,语文总平成绩,语文期末级平均分,语文口语,数学平时成绩,数学期末成绩,数学总平成绩,数学期末级平均分,英语平时成绩,英语期末成绩,英语总平成绩,英语期末级平均分,英语口语,生物平时成绩,生物期末成绩,生物总平成绩,生物期末级平均分,物理平时成绩,物理期末成绩,物理总平成绩,物理期末级平均分,化学平时成绩,化学期末成绩,化学总平成绩,化学期末级平均分,历史平时成绩,历史期末成绩,历史总平成绩,历史期末级平均分,地理平时成绩,地理期末成绩,地理总平成绩,地理期末级平均分,体育平时成绩,体育期末成绩,体育总平成绩,音乐总平成绩,美术总平成绩,信息平时成绩,信息期末成绩,信息总平成绩,综合总平成绩,操行分,德育等级,获奖情况,评语";
		$list = explode(",", $fields);
		$header = [];
		foreach ($list as $key=> $value){
			$header[$value] = $value;
		}
		Excel::toExcel($result,'期末成绩报告',$header);
		exit;
	}

	public function importExcel() {
		$termId = input("termId");
		$termType = input("termType");
		$grade = input("grade");
		$clazz = input("clazz");
		if($grade) {
			$array = explode("_", $grade);
			$where["年级号"] = $array[0];
			$where["学籍类型"] = $array[1];
		}
		$where["班号"] = $clazz;
		//上传excel文件
	    $file = request()->file('files');
	    if(!$file) {
	    	return "请选择文件";
	    }
	    $data = Excel::importExcel($file);
	    if(count($data) == 0) {
	    	return "没有数据！";
	    }
	    //print_r($data);
	    $result = [];
	    $fields = "政治平时成绩,政治期末成绩,政治总平成绩,政治期末级平均分,语文平时成绩,语文期末成绩,语文总平成绩,语文期末级平均分,数学平时成绩,数学期末成绩,数学总平成绩,数学期末级平均分,英语平时成绩,英语期末成绩,英语总平成绩,英语期末级平均分,生物平时成绩,生物期末成绩,生物总平成绩,生物期末级平均分,物理平时成绩,物理期末成绩,物理总平成绩,物理期末级平均分,化学平时成绩,化学期末成绩,化学总平成绩,化学期末级平均分,历史平时成绩,历史期末成绩,历史总平成绩,历史期末级平均分,地理平时成绩,地理期末成绩,地理总平成绩,地理期末级平均分,体育平时成绩,体育期末成绩,体育总平成绩,音乐总平成绩,美术总平成绩,信息平时成绩,信息期末成绩,信息总平成绩,综合总平成绩,操行分";
	    $fieldList = explode(",", $fields);
	    $studentMap = [];
	    $studentList = Db::table("学生信息")
				  ->field("ID,convert(nvarchar(10),学号)+姓名 NAME")
				  ->where($where)
				  ->select();
		foreach ($studentList as $key => $obj) {
			$studentMap[$obj["NAME"]] = $obj["ID"];
		}
	    foreach ($data as $key => $obj) {
	    	foreach ($obj as $name => $value) {
	    		if(array_key_exists($name, $fieldList)) {
	    			$obj[$name] = $this::scoreFixed($value);
	    		}
	    		if($name == "姓名") {
	    			$obj["学生姓名"] = $obj["姓名"];
	    			unset($obj[$name]);
	    		}
	    		if($name == "性别") {
	    			unset($obj[$name]);
	    		}
	    	}
	    	$nameKey = str_replace(" ",'',$obj["学号"].$obj["学生姓名"]);
	    	if(array_key_exists($nameKey, $studentMap)) {
	    		$obj["学生ID"] = $studentMap[$nameKey];
		    	$obj["学期ID"] = $termId;
		    	$obj["上下学期"] = $termType;
		    	$result[$key] = $obj;
	    	}
	    	
	    }

	    if(count($result) > 0) {
	    	$sql = "delete from 期末成绩报告 where 学期ID = ".$termId." and 上下学期 = '".$termType."' and exists(select 1 from 学生信息 xs where 期末成绩报告.学生ID = xs.ID and xs.学籍类型 = ".$where["学籍类型"]." and xs.年级号 = ".$where["年级号"]." and xs.班号 = ".$clazz.")";
	    	Db::execute($sql);
			Db::table('期末成绩报告')->insertAll($result);
    	}
    	return "000";
	}

	public function scoreFixed($v) {
		if($v) {
			$i = strpos($v,".");
			if($i !== false && ($i+4) < strlen($v)) {
				return substr($v, 0,$i+4);
			}
		}
		return v;
	}
}
